/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author leonardo
 */
public class Centro {
    
    private String nome;
    private String endereco;
    private String diretor;
    private List<Curso> cursos;
    
    
    public Centro(String nome){
        this(nome, "sem endereco");
    }
    
    public Centro(String nome, String end){
        this(nome, end, "sem diretor");
    }
    
    public Centro(String nome, String end, String dir){
        this.nome = nome;
        this.endereco = end;
        this.diretor = dir;
        cursos = new ArrayList<Curso>();
    }
    
    /**
     * Remove uma disciplina de um curso através da sua identificação.
     * Esse método pesquisa a disciplina contida no curso e repassa
     * para o método removerDisciplinaDeUmCurso que já recebe a própria
     * Disciplina a ser removida.
     */
    public void removeDisciplinaDeUmCurso(Curso curso, String id) throws CursoInexistenteException, 
            DisciplinaInexistenteException{
        
        removeDisciplinaDeUmCurso(curso, id);
    }
    
    /**
     * Remove esta Disciplina deste Curso.
     */
    public void removeDisciplinaDeUmCurso(Curso curso, Disciplina disc) throws CursoInexistenteException, 
           DisciplinaInexistenteException {
        if (this.cursos.contains(curso)) {
            curso.removerDisciplina(disc);
        } else {
            throw new CursoInexistenteException("Esse Curso não está cadastrado neste Centro.");
        }
        
    }
    
    /**
     * Localiza o Curso pelo idCurso e a Disciplina pelo idDisc e invoca
     * outro método desta classe para realizar a tarefa.
     */
    public void removeDisciplinaDeUmCurso(String idCurso, String idDisc) throws CursoInexistenteException,
            DisciplinaInexistenteException {
        
        Curso c = getCurso(idCurso);
        removeDisciplinaDeUmCurso(c, c.getDisciplinaID(idDisc));
        
    }
    
    
    /**
     * Remove esta Disciplina do Curso que contém essa identificação (idCurso).
     */
    public void removeDisciplinaDeUmCurso(String idCurso, Disciplina disc) throws CursoInexistenteException,
            DisciplinaInexistenteException {
        
        removeDisciplinaDeUmCurso(getCurso(idCurso), disc);
        
    }
    
    
    /**
     * Retorna um curso cadastrado de acordo com a sua identificação,
     * se não houver, lança uma exceção.
     */
    public Curso getCurso(String id) throws CursoInexistenteException{
        
        for (Curso c: this.cursos){            
            if (c.getID().equals(id)){
                return c;
            }            
        }
        throw new CursoInexistenteException("Não existe curso com essa identificação.");
    }
    
    // TODO ...
    
}